#读取report项目，并且将需要处理的数据进行
def data():
    with open('report.txt.txt',encoding='utf-8') as f:
        data=f.readlines()  #这里得到的是将每一行作为一个字符串组成的列表，很重要
    data_count=data[1:]   #这是列表，这里是将开头名称部分过滤掉，后面会用到的数据留下
    return data_count
#统计每名学生总成绩、并计算平均,并且更新至新的列表中
def lst_score(x):
    lst_score=[]  #待更新的空列表
    for i in x:
        total_score=0
        j=i.strip().split()  #将每一个字符串转化为列表，主要针对这个列表编辑，简写函数
        k=j[1:]
        for h in k:
            total_score+=int(h)  #总分
        ave_score=('%.2f')%(total_score/9)   #平均分，这里保留2位小数的字符串
        j.append(str(total_score))  #这里已经将总分元素全部添加进带学生姓名的列表中
        j.append(ave_score)  #这里已经将平均分元素添加进带学生姓名的列表中
        lst_score.append(j)
        # 这里为了按照平均分进行排名，需要先导入到列表中进行排序，形成新的列表，再进行后续的操作
    lst_score_1 = sorted(lst_score,key=lambda y: y[-1], reverse=True)  # 得到的是按照平均分排序的列表

    #这里将lst_score_1作为x变量放入到函数中，函数中的 lst_score_1用x代替
    #汇总每一科目的平均分和总平均分

    lst_score_ave=['平均']   #这个是为了记录每一科目的平均分和总平均分
    for i in range(1,len(lst_score_1[1])):
        ave_c=0
        for j in lst_score_1:
            ave_c+=int(float(j[i]))
        ave_c_1='%.2f'%(ave_c/len(lst_score_1))
        lst_score_ave.append(str(ave_c_1))

    #下面实现将科目平均分和总平均分添加进lst_score_1列表中，作为第一个元素，用到insert函数
    lst_score_1.insert(0,lst_score_ave)  #到这里lst_score_1又一次更新了科目及总平均分元素

    #添加名次，替换60分以下的成绩为“不及格”
    #先实现名次添加
    for i in range(0,len(lst_score_1)):
        lst_score_1[i].insert(0,str(i))  #到这里lst_score_1又一次更新了名次元素
    #注意超出范围，在写循环的时候，一定要注意range范围是否超出了

    #替换60分以下的成绩为“不及格”,这里可以参考从一开始更新平均数那一部分直接更新列表k
    lst_score_f=lst_score_1[0:1]
    for i in lst_score_1[1:]:
        j=i[2:-2]
        j_1=['不及格' if int(float(k))<60 else k for k in j]  #需要学习列表替换元素的几种方法
        new_lst=i[0:2]+j_1+ i[-2:]  #这里相当于恢复原始的元素列表结构
        lst_score_f.append(new_lst)
    #插入标题栏
    lst_title=['名次','姓名','语文','数学','英语','物理','化学','生物','政治','历史','地理','总分','平均分']
    lst_score_f.insert(0,lst_title)     #lst_score_f作为运算结果

    #将运算结果转换形式，用于输入到文件中
    lst_score_p=[]   #定义一个新列表，用于写入文件用
    for i in lst_score_f:
        word=' '.join(i)+'\n'
        lst_score_p.append(word)   #lst_score_p已经更新完成
    return lst_score_p

def lst_write(x):
    #写入文件
    with open('new_report.txt.txt','w',encoding='utf-8') as f1:
            f1.writelines(x)

def main():
    lst_write(lst_score(data()))

main()